﻿//#include <iostream>
//#include <cstring>
//using namespace std;
//class myString
//{
//private:
//    string mainstr; // 串
//    int size;       // 串长度
//    void GetNext(string p, int next[])
//    {
//        int i = 0;
//        next[0] = -1;
//        int j = -1;
//        while (i <(int) p.length()-1)
//        {
//            if (j == -1|| p[i] == p[j])
//            {
//                ++i;
//                ++j;
//                next[i] = j;
//            }
//            else
//            {
//                j = next[j];
//            }
//        }
//    }
//    int KMPFind(string p, int pos, int next[])
//    {
//        int i = pos;
//        int j = 0;
//        while (i < size && j < (int)p.length())
//        {
//            if (j ==-1|| p[j] == mainstr[i])
//            {
//                ++i;
//                ++j;
//            }
//            else
//                j = next[j];
//        }
//        if (j == (int)p.length()) 
//        {
//            return i - j + 1; 
//        }
//        else 
//        {
//            return 0;
//        }
//    }
//public:
//    myString();
//    ~myString();
//    void SetVal(string sp);
//    int KMPFindSubstr(string p, int pos);
//};
//myString::myString()
//{
//    size = 0;
//    mainstr = "";
//}
//myString::~myString()
//{
//    size = 0;
//    mainstr = "";
//}
//void myString::SetVal(string sp)
//{
//    mainstr = "";
//    mainstr.assign(sp);
//    size = mainstr.length();
//}
//int myString::KMPFindSubstr(string p, int pos)
//{
//    int i;
//    int t = p.length();
//    int* next = new int[t];
//    GetNext(p, next);
//    for (i = 0; i < t; i++)
//    {
//        cout << next[i] << ' ';
//    }
//    cout << endl;
//    int v = -1;
//    v = KMPFind(p, pos, next);
//    delete[]next;
//    return v;
//}
//int main()
//{
//    int t;
//    cin >> t;
//    string mainstr;
//    string p;
//    int len;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> mainstr >> p;
//        myString mystring;
//        len = mainstr.length();
//        mystring.SetVal(mainstr);
//        int pos=mystring.KMPFindSubstr(p,0);
//        cout << pos << endl;
//    }
//    return 0;
//}
//#include <iostream>
//#include <string>
//using namespace std;
//class myString
//{
//private:
//    string mainstr; // 串
//    int size;       // 串长度
//    void GetNext(string p, int next[])
//    {
//        int i = 0;
//        next[0] = -1;
//        int j = -1;
//        while (i < (int)p.length() - 1)
//        {
//            if (j == -1 || p[i] == p[j])
//            {
//                ++i;
//                ++j;
//                next[i] = j;
//            }
//            else
//            {
//                j = next[j];
//            }
//        }
//    }
//    int  KMPFind(string p,  int pos, int next[])
//    {
//        int i = pos;
//        int j = 0;
//        while (i < size && j < (int)p.length())
//        {
//            if (j == -1 || p[j] == mainstr[i])
//            {
//                ++i;
//                ++j;
//            }
//            else
//                j = next[j];
//        }
//        if (j == (int)p.length())
//        {
//            return i - j;//i-j是表示位置从0开时，要是是要第一个位置是1，则是i-j+1'
//        }
//        else
//            return -1;/如果是0的话，可能与找到的POS位置是0冲突，导致没有进行替换
//    }
//public:
//    myString();
//    ~myString();
//    void SetVal(string sp);
//    void KMPFindSubstr(string p, string change, int pos);
//};
//myString::myString()
//{
//    size = 0;
//    mainstr = "";
//}
//myString::~myString()
//{
//    size = 0;
//    mainstr = "";
//}
//void myString::SetVal(string sp)
//{
//    mainstr = "";
//    mainstr.assign(sp);
//    size = mainstr.length();
//}
//void myString::KMPFindSubstr(string p, string change, int pos)
//{
//    int i;
//    int t = p.length();
//    int* next = new int[t];
//    GetNext(p, next);
//    int v=KMPFind(p, pos, next);
//    if (v != -1)
//    {
//        int start = v;
//        int len = p.length();
//        mainstr.replace(start, len, change);
//    }
//    cout << mainstr << endl;
//    delete[]next;
//}
//int main()
//{
//    int t;
//    cin >> t;
//    string mainstr;
//    string p;
//    string change;
//    for (int i = 0; i < t; i++)
//    {
//        cin >> mainstr >> p >> change;
//        cout << mainstr << endl;
//        myString mystring;
//        mystring.SetVal(mainstr);
//        mystring.KMPFindSubstr(p, change, 0);
//    }
//    return 0;
//}
//#include <iostream>
//using namespace std;
//string matched_Prefix_Postfix(string str)
//{
//	int len = str.length();
//	int flag = 0;
//	if (len == 1)
//	{
//		return "empty";
//	}
//	else
//	{
//		for (int i = 0; i < len-1; i++)//len-1，如果是len，下面len-1-i就变成str.substr(0,0)导致错误
//		{
//			if (str.substr(0, len -1- i) == str.substr(i + 1, len))
//			{
//				flag = 1;
//				return str.substr(0, len -1- i);
//				break;
//			}
//		}
//		if (flag == 0)
//		{
//			return "empty";
//		}
//	}
//}
//int main()
//{
//	int t;
//	string str;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> str;
//		string str_=matched_Prefix_Postfix(str);
//		cout << str_ << endl;
//	}
//	return 0;
//}
//#include <iostream>
//using namespace std;
//void Getnext(string p, int next[])
//{
//	int i = 0;
//	next[0] = -1;
//	int j = -1;
//	while (i < (int)p.length() - 1)
//	{
//		if (j== -1 || p[i] == p[j])
//		{
//			++i;
//			++j;
//			next[i] = j;
//		}
//		else
//			j = next[j];
//	}
//}
//bool KMPFind(string mainstr, string p, int next[])
//{
//	int i = 0;
//	int j = 0;
//	int size = mainstr.length();
//	int sizep = p.length();
//	int pre = -1;
//	int cur = -1;
//	if (sizep == 0 || size < 2 * sizep)
//	{
//		return false;
//	}
//	while (i < size && j < (int)p.length())
//	{
//		if (j == -1 || p[j] == mainstr[i])
//		{
//			++i;
//			++j;
//		}
//		else
//		{
//			j = next[j];
//		}
//		if (j == sizep)
//		{
//			cur = i - j;
//			if (pre != -1 && cur >= pre + sizep)
//			{
//				delete[]next;
//				return true;
//			}
//			if (pre == -1) {
//				pre = cur;
//			}
//			j = next[j-1];
//		}
//	}
//	delete[]next;
//	return false;
//}
//int find(string str)
//{
//	int len = str.length();
//	if (len < 2)
//	{
//		return -1;
//	}
//	else     //abcd  dddd
//	{
//		for (int i = len / 2; i >= 1; i--)
//		{
//			for (int j = 0; j <= len - i; j++)
//			{
//				string p = str.substr(j, i);
//				int* next = new int[p.length()];
//				Getnext(p, next);
//				if (KMPFind(str, p, next))
//					return i;
//			}
//		}
//	}
//
//	return -1;
//}
//int main()
//{
//	int t;
//	string str;
//	cin >> t;
//	for (int i = 0; i < t; i++)
//	{
//		cin >> str;
//		int v = find(str);
//		cout << v << endl;
//	}
//	return 0;
//}
#include <iostream>
using namespace std;
class Mainstring
{
public:
	int size;
	string mainstr;
	Mainstring()
	{
		size = 0;
		mainstr = "";
	}
	~Mainstring()
	{
		size = 0;
		mainstr = "";
	}
	void set(string str)
	{
		mainstr.assign(str);
		size = str.length();
	}
	int getnext(string p, int next[])
	{
		int i = 0;
		int j = -1;
		next[0] = -1;
		while (i < p.length() - 1)
		{
			if (j == -1 || p[i] == p[j])
			{
				++i;
				++j;
				next[i] = j;
			}
			else
				j = next[j];
		}
		return next[p.length()-1];
	}
    bool check(string p,int b)
	{//abcd
		int len = p.length();
		for (int i = b; i < len; i++)
		{
			if (p[i] != p[i - b])
			{
				return false;
			}
		}
		return true;
	}
};
int main()
{
	int t;
	cin >> t;
	string str;
	for (int i = 0; i < t; i++)
	{
		cin >> str;
		Mainstring mainstring;
		mainstring.set(str);
		int len = str.length();
		int* next = new int[len];
		int a = mainstring.getnext(str, next); 
		a = a + 1;
		int b = len - a;
		if (b < len)
		{
			if (mainstring.check(str, b))
			{
				if (len % b == 0)
				{
					cout << 0 << endl;
				}
				else
				{
					cout << b - (len % b) << endl;
				}
			}
			else
			{
				int maxd = 0;
				for (int i = len - 1; i >= 1; i--)
				{
					if (mainstring.check(str, i))
					{
						maxd = i;
						break;
					}
				}
				if (maxd == 0)
				{
					cout << len << endl;
				}
				else
				{
					cout << maxd - (len % maxd) << endl;
				}
			}
		}
	}
	return 0;
}